package com.ljh.myrpc.serializer;

import com.ljh.myrpc.utils.SpiLoader;

import java.util.HashMap;
import java.util.Map;

/**
 * 序列化器工厂类
 */
public class SerializerFactory {
    /**
     * 序列化器是可以复用的，没必要每次执行序列化操作前都创建一个新的对象。
     * 因此我们可以使用设计模式中的 工厂模式 + 单例模式 来创建和获取序列化器的操作
     */

    // 静态代码块加载
//    static {
//        SpiLoader.load(Serializer.class); // 加载所有的序列化器SPI
//    }
//    private static final Map<String, Serializer> KEY_SERIALIZER_MAP = new HashMap<>(){{
//        put(SerializerKeys.JDK, new JdkSerializer());
//        put(SerializerKeys.JSON, new JsonSerializer());
//        put(SerializerKeys.HESSIAN, new HessianSerializer());
//        put(SerializerKeys.KRYO, new KryoSerializer());
//    }};

    // 默认序列化器
    private static final Serializer DEFAULT_SERIALIZER = new JdkSerializer();

    /**
     * 获取实例
     * @param key
     * @return
     */
    public static Serializer getInstance(String key) {
//        Serializer serializer = KEY_SERIALIZER_MAP.getOrDefault(key, DEFAULT_SERIALIZER);
//        if (serializer == null) {
//            throw new IllegalArgumentException("No serializer found for key: " + key);
//        }
//        return serializer;
        return SpiLoader.getInstance(Serializer.class, key); // 从SPI加载器中获取指定key的序列化器实例
    }




}
